#!/usr/bin/env python3
"""
多模态研究助手演示
展示如何使用多模态搜索工具进行研究
"""

import asyncio
import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 从增强版多代理工作流导入所需类
from src.research_core.enhanced_multi_agent_workflow import create_enhanced_multi_agent_workflow as create_multi_agent_workflow, EnhancedMultiAgentState as MultiAgentState
from src.tools.search_tool import MultimodalSearchTool
from src.config import research_settings

async def demo_multimodal_research():
    """演示多模态研究功能"""
    print("🔍 多模态研究助手演示")
    print("=" * 50)
    
    # 创建多代理工作流
    print("正在创建多代理工作流...")
    try:
        app = create_multi_agent_workflow()
        print("✅ 工作流创建成功")
    except Exception as e:
        print(f"❌ 工作流创建失败: {e}")
        return
    
    # 定义研究问题
    question = "人工智能在医疗领域的最新应用有哪些？"
    print(f"\n研究问题: {question}")
    
    # 定义初始状态
    initial_state = MultiAgentState(
        question=question,
        search_query="",
        search_results="",
        research_complete=False,
        final_answer="",
        images=[],
        tables=[],
        multimodal_content={}
    )
    
    # 执行工作流
    print("\n开始执行研究...")
    try:
        # 使用流式方式执行工作流
        async for chunk in app.astream(initial_state):
            if "__end__" in chunk:
                print("✅ 研究完成!")
                break
            else:
                # 打印当前执行的节点
                print(f"🔄 执行节点: {list(chunk.keys())[0] if chunk else 'Unknown'}")
                
        # 获取最终结果
        final_state = await app.ainvoke(initial_state)
        final_answer = final_state.final_answer
        
        print(f"\n📝 研究结果:")
        print("-" * 30)
        print(final_answer)
        
        # 显示多模态内容（如果有）
        if final_state.images:
            print(f"\n🖼️  相关图片 ({len(final_state.images)} 张):")
            for i, image in enumerate(final_state.images[:3]):  # 只显示前3张
                print(f"  {i+1}. {image.get('description', '无描述')}")
                print(f"     URL: {image.get('url', '无链接')}")
                
        if final_state.tables:
            print(f"\n📊 相关表格 ({len(final_state.tables)} 个):")
            for i, table in enumerate(final_state.tables[:2]):  # 只显示前2个
                print(f"  {i+1}. {table.get('title', '无标题')}")
                
    except Exception as e:
        print(f"❌ 研究执行失败: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    asyncio.run(demo_multimodal_research())
